/*
 * Copyright 2019, Data61, CSIRO (ABN 41 687 119 230)
 *
 * SPDX-License-Identifier: GPL-2.0-only
 */

#pragma once

#define TX2_GPIO_PADDR 0x2210000
#define TX2_GPIO_SIZE 0x10000

enum gpio_port {
    GPIO_PORT_A,
    GPIO_PORT_B,
    GPIO_PORT_C,
    GPIO_PORT_D,
    GPIO_PORT_E,
    GPIO_PORT_F,
    GPIO_PORT_G,
    GPIO_PORT_H,
    GPIO_PORT_I,
    GPIO_PORT_J,
    GPIO_PORT_K,
    GPIO_PORT_L,
    GPIO_PORT_M,
    GPIO_PORT_N,
    GPIO_PORT_O,
    GPIO_PORT_P,
    GPIO_PORT_Q,
    GPIO_PORT_R,
    GPIO_PORT_T,
    GPIO_PORT_X,
    GPIO_PORT_Y,
    GPIO_PORT_BB,
    GPIO_PORT_CC,
    GPIO_NPORTS
};

enum gpio_pin {
    GPIO_PA0 = 0,
    GPIO_PA1,
    GPIO_PA2,
    GPIO_PA3,
    GPIO_PA4,
    GPIO_PA5,
    GPIO_PA6,
    GPIO_PB0 = 8, /* the pins are port aligned to help with pin-to-port conversion */
    GPIO_PB1,
    GPIO_PB2,
    GPIO_PB3,
    GPIO_PB4,
    GPIO_PB5,
    GPIO_PB6,
    GPIO_PC0 = 16,
    GPIO_PC1,
    GPIO_PC2,
    GPIO_PC3,
    GPIO_PC4,
    GPIO_PC5,
    GPIO_PC6,
    GPIO_PD0 = 24,
    GPIO_PD1,
    GPIO_PD2,
    GPIO_PD3,
    GPIO_PD4,
    GPIO_PD5,
    GPIO_PE0 = 32,
    GPIO_PE1,
    GPIO_PE2,
    GPIO_PE3,
    GPIO_PE4,
    GPIO_PE5,
    GPIO_PE6,
    GPIO_PE7,
    GPIO_PF0 = 40,
    GPIO_PF1,
    GPIO_PF2,
    GPIO_PF3,
    GPIO_PF4,
    GPIO_PF5,
    GPIO_PG0 = 48,
    GPIO_PG1,
    GPIO_PG2,
    GPIO_PG3,
    GPIO_PG4,
    GPIO_PG5,
    GPIO_PH0 = 56,
    GPIO_PH1,
    GPIO_PH2,
    GPIO_PH3,
    GPIO_PH4,
    GPIO_PH5,
    GPIO_PH6,
    GPIO_PI0 = 64,
    GPIO_PI1,
    GPIO_PI2,
    GPIO_PI3,
    GPIO_PI4,
    GPIO_PI5,
    GPIO_PI6,
    GPIO_PI7,
    GPIO_PJ0 = 72,
    GPIO_PJ1,
    GPIO_PJ2,
    GPIO_PJ3,
    GPIO_PJ4,
    GPIO_PJ5,
    GPIO_PJ6,
    GPIO_PJ7,
    GPIO_PK0 = 80,
    GPIO_PL0 = 88,
    GPIO_PL1,
    GPIO_PL2,
    GPIO_PL3,
    GPIO_PL4,
    GPIO_PL5,
    GPIO_PL6,
    GPIO_PL7,
    GPIO_PM0 = 96,
    GPIO_PM1,
    GPIO_PM2,
    GPIO_PM3,
    GPIO_PM4,
    GPIO_PM5,
    GPIO_PN0 = 104,
    GPIO_PN1,
    GPIO_PN2,
    GPIO_PN3,
    GPIO_PN4,
    GPIO_PN5,
    GPIO_PN6,
    GPIO_PO0 = 112,
    GPIO_PO1,
    GPIO_PO2,
    GPIO_PO3,
    GPIO_PP0 = 120,
    GPIO_PP1,
    GPIO_PP2,
    GPIO_PP3,
    GPIO_PP4,
    GPIO_PP5,
    GPIO_PP6,
    GPIO_PQ0 = 128,
    GPIO_PQ1,
    GPIO_PQ2,
    GPIO_PQ3,
    GPIO_PQ4,
    GPIO_PQ5,
    GPIO_PR0 = 136,
    GPIO_PR1,
    GPIO_PR2,
    GPIO_PR3,
    GPIO_PR4,
    GPIO_PR5,
    GPIO_PT0 = 144,
    GPIO_PT1,
    GPIO_PT2,
    GPIO_PT3,
    GPIO_PX0 = 152,
    GPIO_PX1,
    GPIO_PX2,
    GPIO_PX3,
    GPIO_PX4,
    GPIO_PX5,
    GPIO_PX6,
    GPIO_PX7,
    GPIO_PY0 = 160,
    GPIO_PY1,
    GPIO_PY2,
    GPIO_PY3,
    GPIO_PY4,
    GPIO_PY5,
    GPIO_PY6,
    GPIO_PBB0 = 168,
    GPIO_PBB1,
    GPIO_PCC0 = 176,
    GPIO_PCC1,
    GPIO_PCC2,
    GPIO_PCC3,
};

#define MAX_GPIO_ID GPIO_PCC3
